/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Adkiraki;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.jdo.PersistenceManager;

/**
 *
 * @author pauloferreira
 */
public class RegistroBean {
    private String nome;    
    private String login;    
    private String cpf;
    private String email;    
    private String confEmail;    
    private String senha;
    private String confSenha;    

    // Expressão regular do email
    private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
    
    // Construtor
    public RegistroBean() {
        this.nome = "";
        this.login = "";
        this.cpf = "";
        this.email = "";
        this.confEmail = "";
        this.senha = "";        
        this.confSenha = "";        
    }    
    
    public String Salvar() {

        FacesContext context = FacesContext.getCurrentInstance();
        ResourceBundle bundle =
                ResourceBundle.getBundle("Adkiraki.mensagens",
                    context.getViewRoot().getLocale());

        String msg = "";

        // Testa se login
        if (this.login.length() < 5)
        {
            msg = bundle.getString("login_muito_pequeno");
            context.addMessage (null, new FacesMessage(msg));
            return null;
        }

        String query = "";
        PersistenceManager pm = PMF.get().getPersistenceManager();
        List<Usuario> lUsuario;

        // Testa se Login caso já exista
        query = "select from " + Usuario.class.getName() + " where login == '" + this.login + "'";

        lUsuario = (List<Usuario>) pm.newQuery(query).execute();

        if (lUsuario.size() > 0){

            msg = bundle.getString("login_duplicate");
            context.addMessage (null, new FacesMessage(msg));            
            pm.close();
            return null;
        }

        // Testa se email é um email válido
        // Por expressão regular
        if (!this.email.matches(EMAIL_PATTERN))
        {
            msg = bundle.getString("email_invalido");
            context.addMessage (null, new FacesMessage(msg));
            return null;
        }

        // Testa se Login caso já exista
        query = "select from " + Usuario.class.getName() + " where email == '" + this.email + "'";
                
        lUsuario = (List<Usuario>) pm.newQuery(query).execute();

        if (lUsuario.size() > 0){

            msg = bundle.getString("email_duplicate");
            context.addMessage (null, new FacesMessage(msg));            
            pm.close();
            return null;
        }
      
        // Testa se email é igual
        if (!this.email.contentEquals(this.confEmail))
        {
            msg = bundle.getString("confirmar_email_fail");
            context.addMessage (null, new FacesMessage(msg));
            return null;
        }

        // Testa se tamanho da senha
        if (this.senha.length() < 6)
        {
            msg = bundle.getString("senha_muito_pequena");
            context.addMessage (null, new FacesMessage(msg));
            return null;
        }
        
        // Testa se senha é igual
        if (!this.senha.contentEquals(this.confSenha))
        {
            msg = bundle.getString("confirmar_senha_fail");
            context.addMessage (null, new FacesMessage(msg));
            return null;
        }

        Date data = new Date();
        SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
        formatador.format(data);

        // Insere o nomo usuário
        Usuario usuario = new Usuario(this.nome, this.login, this.senha, this.email, true, this.cpf, data, 0);
        pm.makePersistent(usuario);     
        pm.close();
        
        this.nome = "";
        this.login = "";
        this.cpf = "";
        this.email = "";
        this.confEmail = "";
        this.senha = "";        
        this.confSenha = "";        
        
        return "login";
    }
    
    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    /**
     * @param login the login to set
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * @return the cpf
     */
    public String getCpf() {
        return cpf;
    }

    /**
     * @param cpf the cpf to set
     */
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the confEmail
     */
    public String getConfEmail() {
        return confEmail;
    }

    /**
     * @param confEmail the confEmail to set
     */
    public void setConfEmail(String confEmail) {
        this.confEmail = confEmail;
    }

    /**
     * @return the confSenha
     */
    public String getConfSenha() {
        return confSenha;
    }

    /**
     * @param confSenha the confSenha to set
     */
    public void setConfSenha(String confSenha) {
        this.confSenha = confSenha;
    }
}

